home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / UTIL / SYS / RPCBOOT / !RPCBootEd / Source (.txt) < prev   
RISC OS BBC BASIC V Source  |  1995-03-08  |  36KB  |  1,604 lines

  1.  ><RPCBootEd$Dir>.Source
  2.  This application is FreeWare. (c) 1995 Dick Alstein
  3. appl$="RPCBootEd"
  4. "applversion$="1.00 (8-Mar-95)"
  5. error
  6. quit%=
  7.     )mask%=1+(1<<4)+(1<<5)+(1<<11)+(1<<12)
  8.  "Wimp_Poll",mask%,blk% 
  9.  reason%
  10.  reason% 
  11.  1 : 
  12. redraw(blk%!0)
  13.  2 : 
  14.  "Wimp_OpenWindow",,blk%
  15.  blk%!0 
  16. !      
  17.  winhdl%(0),winhdl%(1)
  18. .        
  19.  "Wimp_GetPointerInfo",,ptrinfo%
  20.         
  21.  ptrinfo%!8=1 
  22.           
  23.  Adjust-close
  24. (          
  25.  "Filer_OpenDir "+seqdir$
  26.         
  27.         
  28.  -1) 
  29. )          
  30.  "Wimp_CloseWindow",,blk%
  31.         
  32.       
  33. '        
  34.  "Wimp_CloseWindow",,blk%
  35.         
  36.  6 : 
  37. mouseclick(blk%!0,blk%!4,blk%!8,blk%!12,blk%!16)
  38.  7 : 
  39. appl_move
  40.  8 : 
  41. key(blk%!0,blk%!4,blk%!24)
  42.  9 : 
  43. menuselect(blk%)
  44.  17,18 : 
  45. receive(blk%!4,blk%!8,blk%!16)
  46.  quit%
  47.  buf%,w%,i%
  48.  errblk% &100
  49.  "Wimp_Initialise",200,&4B534154,appl$ 
  50.  osversion%,thistask%
  51. error : 
  52.  blk% &600
  53. indsize%=&600
  54.  indir% indsize%
  55. indirend%=indir%+indsize%
  56.  ptrinfo% 20
  57.  dragblk% 60
  58.  scrapblk% 256
  59.  scrapblk2% 256
  60. 4)ApplDir$=
  61. readvarval("RPCBootEd$Dir")
  62. ApplPath$="RPCBootEdRes:"
  63. msg_init
  64.  bariconname% 16
  65. scrapblk%!0=-1
  66. 9!scrapblk%!4=0 : scrapblk%!8=0
  67. :%scrapblk%!12=68 : scrapblk%!16=68
  68. scrapblk%!20=&7000311A
  69. scrapblk%!24=bariconname%
  70. scrapblk%!28=1
  71. scrapblk%!32=16
  72. ? $(bariconname%)="frpcbooted"
  73.  "Wimp_CreateIcon",,scrapblk% 
  74.  baricon%
  75.  winhdl%(1)
  76.  wintitle%(1)
  77. maxapps%=256
  78.  "Wimp_OpenTemplate",,ApplPath$+"Templates"
  79. E"infowin%=
  80. loadtemplate("Info")
  81. F%$(blk%!(92+7*32+20))=applversion$
  82. G'winhdl%(0)=
  83. loadtemplate("BootSeq")
  84. icon0xmin%=blk%!(92+0*32+0)
  85. icon0xmax%=blk%!(92+0*32+8)
  86. icon0ymin%=blk%!(92+0*32+4)
  87. icon1xmin%=blk%!(92+1*32+0)
  88. icon1xmax%=blk%!(92+1*32+8)
  89. icon2xmin%=blk%!(92+2*32+0)
  90. icon2xmax%=blk%!(92+2*32+8)
  91. itemheight%=80
  92. wintitle%(0)=blk%!76
  93.  i% (blk%!84)
  94. wintitle%(1)=i%
  95. blk%!76=wintitle%(1)
  96.  "Wimp_CreateWindow",,blk%+4 
  97.  winhdl%(1)
  98. U($(wintitle%(0))=
  99. msg_lookup0("BSEQ")
  100. V)$(wintitle%(1))=
  101. msg_lookup0("DBSEQ")
  102. W(dialogwin%=
  103. loadtemplate("Dialogue")
  104. dial_msg%=blk%!(92+20)
  105. Y<dial_buttoncol%=(blk%!(92+1*32+16)) 
  106.  ((1<<2)+(&FF<<24))
  107.  dial_text%(3)
  108. [#dial_text%(1)=blk%!(92+1*32+20)
  109. \#dial_text%(2)=blk%!(92+2*32+20)
  110. ]#dial_text%(3)=blk%!(92+3*32+20)
  111.  "Wimp_CloseTemplate"
  112. nractions%=8
  113.  action%(nractions%)
  114.  i%=0 
  115.  nractions%
  116.  buf% 16
  117.   action%(i%)=buf%
  118. $(action%(0))="Run"
  119. $(action%(1))="Boot"
  120. $(action%(2))="Filer_Run"
  121. $(action%(3))="Filer_Boot"
  122. i!$(action%(4))="Filer_OpenDir"
  123. $(action%(5))="IconSprites"
  124. $(action%(6))="ToolSprites"
  125. $(action%(7))="RMLoad"
  126. $(action%(8))="AddApp"
  127.  Action$(nractions%+1)
  128.  i%=0 
  129.  nractions%
  130. p)  Action$(i%)=
  131. upcase($(action%(i%)))
  132.  nrapps%(1)
  133. nrapps%(0)=0
  134. nrapps%(1)=0
  135. u8applblksize%=0     : 
  136.  size of a block for item data
  137. v#applblksize%+=256  : 
  138.  pathname
  139. w#applblksize%+=12   : 
  140.  leafname
  141. applblksize%+=4    : 
  142.  type
  143. y4applblksize%+=16   : 
  144.  name of sprite to display
  145. z!applblksize%+=4    : 
  146.  action
  147. {,applblksize%+=4    : 
  148.  "disabled" switch
  149. |%applblksize%+=256  : 
  150.  parameters
  151.  appl%(1,maxapps%) : 
  152.  pointers to item data blocks
  153. heap_init
  154. initmenus
  155. readscreenvars
  156.  display%(1)    : 
  157.  0 -> Name + Action,  1 -> Full info
  158.  winxmin%(1),winymin%(1),winxmax%(1),winymax%(1)
  159. prevclicktime%=0
  160. prevclickline%=-1
  161. choices_load
  162.  changed%(1)
  163. changed%(0)=
  164. changed%(1)=
  165. 8shutdown_ok%=
  166.  allow shutdown with changes made?
  167.  seqfname$(1)
  168. seqfname$(0)="PreDesktop"
  169. seqfname$(1)="Desktop"
  170. starttag$="|Start "+appl$
  171. endtag$="|End"
  172.  determine boot directory
  173.  "OS_Byte",161,5 
  174.  ,,fsnum%
  175.  "OS_FSControl",33,fsnum%,scrapblk%,&100 
  176.  ,,fs$
  177. drivenum%=4
  178. 2$(scrapblk2%)=fs$+"::"+
  179. (drivenum%)+".$.!Boot"
  180.  "OS_FSControl",37,scrapblk2%,scrapblk%,0,0,&100
  181. bootdir$=
  182. str(scrapblk%)
  183. $seqdir$=bootdir$+".Choices.Boot"
  184. workdir$=seqdir$+"."+appl$
  185. "backupdir$=workdir$+".Backups"
  186. "origdir$=workdir$+".Originals"
  187. direxists(bootdir$) 
  188. 5  dummy%=
  189. errbox(
  190. msg_lookup1("CFBD",bootdir$),2)
  191.  i%=0 
  192. fileexists(
  193. seqfname(i%)) 
  194. <    dummy%=
  195. errbox(
  196. msg_lookup1("CFBS",
  197. seqfname(i%)),2)
  198.  try to read the sequences
  199. setinstalled(
  200. direxists(workdir$))
  201.  installed% 
  202. seq_loadall
  203.  backupexists%(1)
  204.  i%=0 
  205. A  backupexists%(i%)=
  206. fileexists(backupdir$+"."+seqfname$(i%))
  207. redraw(handle%)
  208.  w%,more%,top%,linenr%,lastline%
  209.  handle%=winhdl%(0) 
  210.   w%=0
  211.   w%=1
  212. blk%!0=handle%
  213.  "Wimp_RedrawWindow",,blk% 
  214.  more%
  215. #top%=blk%!16-blk%!24+icon0ymin%
  216.  more%
  217. *  linenr%=(top%-blk%!40) 
  218.  itemheight%
  219. ,  lastline%=(top%-blk%!32) 
  220.  itemheight%
  221.  linenr%<=lastline%
  222. 0    
  223.  (linenr%<nrapps%(w%)) 
  224.  (linenr%>=0) 
  225. )      
  226.  print item data for this line
  227.       
  228.  1. icon + leafname
  229.       b%=appl%(w%,linenr%)
  230. #      scrapblk%!0=icon0xmin%+12
  231.        scrapblk%!8=icon0xmax%
  232. 7      scrapblk%!12=icon0ymin%-(itemheight%*linenr%)
  233. 0      scrapblk%!4=(scrapblk%!12)-itemheight%
  234.       
  235.  b%!292 
  236. "        scrapblk%!16=&13400133
  237.       
  238. "        scrapblk%!16=&17000133
  239.       
  240.       scrapblk%!20=b%+256
  241.       scrapblk%!24=b%+272
  242.       scrapblk%!28=12
  243. &      
  244.  $(b%+272)="Sapplication" 
  245. E        
  246.  check if sprite-less application has been seen by Filer
  247. %        
  248. sprexists($(b%+256)) 
  249. !          $(b%+272)=$(b%+256)
  250.         
  251.       
  252. '      
  253.  "Wimp_PlotIcon",,scrapblk%
  254.       
  255.  2. action
  256.        scrapblk%!0=icon1xmin%
  257.        scrapblk%!8=icon1xmax%
  258.       
  259.  b%!292 
  260. "        scrapblk%!16=&13000131
  261.       
  262. "        scrapblk%!16=&17000131
  263.       
  264. &      scrapblk%!20=action%(b%!288)
  265.       scrapblk%!28=-1
  266.       scrapblk%!32=16
  267. '      
  268.  "Wimp_PlotIcon",,scrapblk%
  269.       
  270.  3. arguments
  271.       
  272.  display%(w%)=1 
  273. "        scrapblk%!0=icon2xmin%
  274. "        scrapblk%!8=icon2xmax%
  275.         
  276.  b%!292 
  277. $          scrapblk%!16=&13000131
  278.         
  279. $          scrapblk%!16=&17000131
  280.         
  281.         scrapblk%!20=b%+296
  282.         scrapblk%!28=-1
  283.         scrapblk%!32=256
  284. )        
  285.  "Wimp_PlotIcon",,scrapblk%
  286.       
  287.         
  288.     linenr%+=1
  289.  "Wimp_GetRectangle",,blk% 
  290.  more%
  291. coordtolinenr(w%,y%)
  292.  yc%,l%
  293. scrapblk%!0=winhdl%(w%)
  294.  "Wimp_GetWindowState",,scrapblk%
  295. /yc%=scrapblk%!16-scrapblk%!24+icon0ymin%-y%
  296.  yc%<0 
  297.   l%=-1
  298.   l%=yc% 
  299.  itemheight%
  300.  l%>nrapps%(w%) 
  301.  l%=nrapps%(w%)
  302. coordtofieldnr(w%,x%)
  303. scrapblk%!0=winhdl%(w%)
  304.  "Wimp_GetWindowState",,scrapblk%
  305.  x%-=scrapblk%!4-scrapblk%!20
  306.  x%<icon1xmin% 
  307.   f%=0
  308.  x%<icon2xmin% 
  309.     f%=1
  310.     f%=2
  311. appl_add(w%,name$,action%,args$,off%,nr%)
  312.  b%,i%,spr$
  313.  nrapps%(w%)=maxapps% 
  314. dialogue(0)
  315.  nr%<0 
  316.  nr%=0
  317.  nr%<nrapps%(w%) 
  318. 3    
  319.  inserting in sequence - shift other items
  320. #    
  321.  i%=nrapps%(w%) 
  322.  nr% 
  323. %      appl%(w%,i%+1)=appl%(w%,i%)
  324.     nr%=nrapps%(w%)
  325.     b%=
  326. heap_get(applblksize%)
  327.   appl%(w%,nr%)=b%
  328.   $(b%)=name$
  329. #   $(b%+256)=
  330. leafname(name$)
  331.   b%!268=
  332. objtype(name$)
  333. appl_setsprite(w%,nr%)
  334.  action%=-1 
  335. '+    
  336.  attach default action to new item
  337.  type% 
  338.       
  339.  &1000 : b%!288=4
  340.       
  341.  &2000
  342.         
  343.  (w%=1) 
  344.           b%!288=3
  345.         
  346.           b%!288=0
  347.         
  348.       
  349.  &FF9  : b%!288=5
  350.       
  351.  &FFA  : b%!288=7
  352.       
  353.   : b%!288=0
  354. 3        
  355.     b%!288=action%
  356.   b%!292=off%
  357.   $(b%+296)=args$
  358.   nrapps%(w%)+=1
  359. seq_setextent(w%)
  360. seq_setchanged(w%,
  361. redrawfromline(w%,nr%)
  362. appl_setsprite(w%,nr%)
  363.  data%,spr$
  364. data%=appl%(w%,nr%)
  365.  data%!268 
  366.     spr$="file_???"
  367.     spr$="file_xxx"
  368.  &1000
  369.     spr$="directory"
  370.  &2000
  371. K$    
  372. sprexists($(data%+256)) 
  373.       spr$=$(data%+256)
  374. M        
  375.       spr$="application"
  376. O        
  377. Q"    spr$="file_"+
  378. ~(data%!268)
  379. sprexists(spr$) 
  380.       spr$="file_xxx"
  381. T        
  382. $(data%+272)="S"+spr$
  383. appl_del(w%,nr%)
  384. heap_release(appl%(w%,nr%))
  385.  i%=nr% 
  386.  (nrapps%(w%)-1)
  387. ]!  appl%(w%,i%)=appl%(w%,i%+1)
  388. nrapps%(w%)-=1
  389. redrawfromline(w%,nr%)
  390. seq_setchanged(w%,
  391. seq_setextent(w%)
  392. appl_move
  393.  w%,linenr%,a%,i%
  394.  dragasprite% 
  395.  "DragASprite_Stop"
  396.  "Wimp_GetPointerInfo",,ptrinfo%
  397. i    w%=-1
  398.  ptrinfo%!12=winhdl%(0) 
  399.  w%=0
  400.  ptrinfo%!12=winhdl%(1) 
  401.  w%=1
  402.  w%<>-1 
  403. m+  linenr%=
  404. coordtolinenr(w%,ptrinfo%!4)
  405.  linenr%<0 
  406.  linenr%=0
  407. o*  a%=appl%(dragfromwin%,dragfromline%)
  408.  w%=dragfromwin% 
  409. q6    
  410.  linenr%>=nrapps%(w%) 
  411.  linenr%=nrapps%(w%)-1
  412. r!    
  413.  dragfromline%>linenr% 
  414.       
  415.  move down
  416. t/      
  417.  i%=(dragfromline%-1) 
  418.  linenr% 
  419. u'        appl%(w%,i%+1)=appl%(w%,i%)
  420.       
  421.       appl%(w%,linenr%)=a%
  422. x%      
  423. redrawfromline(w%,linenr%)
  424. y        
  425. z!    
  426.  dragfromline%<linenr% 
  427.       
  428.  move up
  429. |*      
  430.  i%=dragfromline% 
  431.  (linenr%-1)
  432. }'        appl%(w%,i%)=appl%(w%,i%+1)
  433.       
  434.       appl%(w%,linenr%)=a%
  435. +      
  436. redrawfromline(w%,dragfromline%)
  437.         
  438. $    
  439.  (dragfromline%<>linenr%) 
  440.       
  441. seq_setchanged(w%,
  442.         
  443.  move to other window
  444.      
  445.  nrapps%(w%)<maxapps% 
  446. =      
  447. appl_add(w%,$(a%),a%!288,$(a%+296),a%!292,linenr%)
  448. /      
  449. appl_del(dragfromwin%,dragfromline%)
  450.       
  451. openwindow(0,3)
  452.       
  453. openwindow(1,3)
  454.         
  455. redrawline(w%,linenr%)
  456.  xmin%,ymin%,xmax%,ymax%
  457. xmin%=icon0xmin%+12
  458. xmax%=icon2xmax%
  459. *ymax%=icon0ymin%-(itemheight%*linenr%)
  460. ymin%=ymax%-itemheight%
  461.  "Wimp_ForceRedraw",winhdl%(w%),xmin%,ymin%,xmax%,ymax%
  462. redrawfromline(w%,linenr%)
  463.  xmin%,ymin%,xmax%,ymax%
  464. xmin%=icon0xmin%+12
  465. xmax%=icon2xmax%
  466. *ymax%=icon0ymin%-(itemheight%*linenr%)
  467. ymin%=-10000
  468.  "Wimp_ForceRedraw",winhdl%(w%),xmin%,ymin%,xmax%,ymax%
  469. seq_clear(w%)
  470.  nrapps%(w%)>0
  471. appl_del(w%,nrapps%(w%)-1)
  472. seq_setchanged(w%,
  473. seq_loadall
  474.  "Hourglass_On"
  475. seq_load(0,
  476. seqfname(0))
  477. seq_load(1,
  478. seqfname(1))
  479.  "Hourglass_Off"
  480. seq_load(w%,fn$)
  481.  p%,in$,cmd$,file$,arg$,act%,reading%,disabled%
  482.  (fn$)
  483. error : 
  484. reading%=
  485.   in$=
  486. -  reading%=(
  487. (starttag$))=starttag$)
  488.  reading% 
  489.  reading% 
  490.     in$=
  491.     p%=
  492. in$,"|")
  493.     disabled%=(p%=1)
  494.  p%>0 
  495. .      reading%=(
  496. (endtag$))<>endtag$)
  497.       
  498.  disabled% 
  499.         in$=
  500. in$,p%+1)
  501.       
  502.         
  503.     p%=
  504. in$," ")
  505. +    cmd$=
  506. upcase(
  507. trimleft(
  508. in$,p%-1)))
  509. !    in$=
  510. trimleft(
  511. in$,p%+1))
  512.     p%=
  513. in$," ")
  514.     file$=
  515. in$,p%-1)
  516. "    arg$=
  517. trimleft(
  518. in$,p%+1))
  519. $    
  520.  (cmd$<>"") 
  521.  (file$<>"") 
  522.       act%=0
  523. 7      
  524.  (act%<=nractions%) 
  525.  (cmd$<>Action$(act%))
  526.         act%+=1
  527.       
  528.        
  529.  (act%<=nractions%) 
  530.         
  531.  act% 
  532.           
  533. 5            
  534. upcase(
  535. leafname(file$))="!BOOT" 
  536.               act%=1
  537. '              file$=
  538. dirname(file$)
  539.             
  540.           
  541. <            
  542. upcase(
  543. leafname(file$)),8)="!SPRITES" 
  544. 8              
  545. leafname(
  546. dirname(file$)),1)="!" 
  547.                 act%=1
  548. )                file$=
  549. dirname(file$)
  550.               
  551.             
  552.         
  553. A        
  554. appl_add(w%,file$,act%,arg$,disabled%,nrapps%(w%)+1)
  555.       
  556.         
  557.  reading%) 
  558. seq_setchanged(w%,
  559. openwindow(w%,3)
  560. seq_save(w%)
  561.  fn$,bfn$,tfn$,i%,data%
  562. error : 
  563. seqfname(w%)
  564. tfn$=seqdir$+".temp"
  565.  tfn$
  566.  copy parts that were written by other apps
  567. #G%) 
  568. (starttag$))=starttag$))
  569. #F%,in$
  570.   in$=
  571.  writing our data for the first time (no start tag found), so
  572.  add a blank line
  573. #F%,""
  574. #G%) 
  575. (endtag$))=endtag$))
  576.  skip our old stuff
  577.   in$=
  578.  write a header
  579. #F%,starttag$+" "+applversion$
  580. #F%,"| -------------------"
  581. #F%,"| "
  582. #F%,"|      "+appl$
  583. #F%,"| "
  584. #F%,"| -------------------"
  585. #F%,"| "
  586. #F%,"| Sequence saved at "+
  587. #F%,"| "
  588.  save our new data
  589.  nrapps%(w%)>0 
  590.  i%=0 
  591.  nrapps%(w%)-1
  592.     data%=appl%(w%,i%)
  593.  data%!292 
  594.       
  595. #F%,"|";
  596.         
  597.  data%!268=&2000 
  598.       
  599.  data%!288 
  600.         
  601. 0          
  602. fileexists($(data%)+".!Boot") 
  603. .            
  604. #F%,"Run "+$(data%)+".!Boot";
  605.           
  606. 9            
  607. #F%,"IconSprites "+$(data%)+".!Sprites";
  608.           
  609.         
  610. 6          
  611. #F%,$(action%(data%!288))+" "+$(data%);
  612.       
  613.         
  614. 2      
  615. #F%,$(action%(data%!288))+" "+$(data%);
  616.          
  617. #F%," "+$(data%+296)
  618. #F%,endtag$
  619.  copy what is after our stuff
  620.   in$=
  621. #F%,in$
  622.  "OS_File",18,tfn$,
  623. objtype(fn$)
  624. fileexists(fn$) 
  625. .'  bfn$=backupdir$+"."+seqfname$(w%)
  626. /1  copyopts$=" A ~C ~D F ~N ~P ~Q ~R ~S ~T ~V"
  627.  "Copy "+fn$+" "+bfn$+" "+copyopts$
  628.   backupexists%(w%)=
  629.  "Delete "+fn$
  630.  "Rename "+tfn$+" "+fn$
  631. seq_setchanged(w%,
  632. seq_setchanged(w%,newval%)
  633.  changed%(w%) 
  634.  newval% 
  635.   t$=$(wintitle%(w%))
  636.  changed%(w%) 
  637. =%    $(wintitle%(w%))=
  638. (t$)-2)
  639. ?     $(wintitle%(w%))=t$+" *"
  640. A!  changed%(w%)=
  641.  changed%(w%)
  642.   blk%!0=winhdl%(w%)
  643.  "Wimp_GetWindowState",,blk%
  644.  (blk%!32 
  645.  (1<<16)) 
  646. EH    
  647.  "Wimp_ForceRedraw",-1,blk%!4,(blk%!16)+4,blk%!12,(blk%!16)+36
  648. seq_setextent(w%)
  649.  lines%
  650. lines%=nrapps%(w%)+1
  651.  lines%<2 
  652.  lines%=2
  653. scrapblk%!0=0
  654. O/scrapblk%!4=icon0ymin%-itemheight%*lines%-8
  655.  display%(w%)=1 
  656.   scrapblk%!8=icon2xmax%-1
  657.   scrapblk%!8=icon1xmax%-1
  658. scrapblk%!12=0
  659.  "Wimp_SetExtent",winhdl%(w%),scrapblk%
  660.  scrapblk%!0=winhdl%(w%)
  661.  SYS "Wimp_GetWindowState",,scrapblk%
  662.  IF (scrapblk%!32 AND (1<<16)) THEN SYS "Wimp_OpenWindow",,scrapblk%
  663. install_do
  664.  "CDir "+workdir$
  665.  "CDir "+backupdir$
  666.  "CDir "+origdir$
  667. `0copyopts$=" A ~C ~D ~F ~N ~P ~Q ~R ~S ~T ~V"
  668.  "Copy "+
  669. seqfname(0)+" "+origdir$+"."+seqfname$(0)+" "+copyopts$
  670.  "Copy "+
  671. seqfname(1)+" "+origdir$+"."+seqfname$(1)+" "+copyopts$
  672. c/copyopts$=" A ~C ~D F ~N ~P ~Q ~R ~S ~T ~V"
  673.  "Copy "+ApplPath$+seqfname$(0)+" "+
  674. seqfname(0)+" "+copyopts$
  675.  "Copy "+ApplPath$+seqfname$(1)+" "+
  676. seqfname(1)+" "+copyopts$
  677. setinstalled(
  678. openwindow(0,1)
  679. openwindow(1,1)
  680. install_undo
  681. closewindow(winhdl%(0))
  682. closewindow(winhdl%(1))
  683. seq_clear(0)
  684. seq_clear(1)
  685. p/copyopts$=" A ~C ~D F ~N ~P ~Q ~R ~S ~T ~V"
  686.  "Copy "+origdir$+"."+seqfname$(0)+" "+
  687. seqfname(0)+" "+copyopts$
  688.  "Copy "+origdir$+"."+seqfname$(1)+" "+
  689. seqfname(1)+" "+copyopts$
  690. wipeopts$=" ~C F R ~V"
  691.  "Wipe "+workdir$+wipeopts$
  692. setinstalled(
  693. dirname(F$)
  694.  p%,q%
  695. F$,"$")+2
  696. F$,".",p%)
  697.  q% > 0 
  698.  p%=q%+1
  699.  q%=0
  700. F$,p%-2)
  701. msg_exit
  702.  "Wimp_CloseDown"
  703. errbox(err$,boxes%)
  704. errblk%!0=0
  705. $(errblk%+4)=err$+
  706.  "Wimp_ReportError",errblk%,boxes%,appl$ 
  707.  ,click%
  708. =(click%=1)
  709. error
  710.  "Wimp_CloseDown" : 
  711. errbox(
  712. $+" (line "+
  713. )+")",3) 
  714. direxists(f$)
  715.  type%,flags%
  716. type%=0
  717. (f$)>0 
  718.  "XOS_File",17,f$ 
  719.  type%;flags%
  720. =(type%=2)
  721. ((flags% 
  722.  1)=0)
  723. fileexists(f$)
  724.  type%,flags%
  725. type%=0
  726. (f$)>0 
  727.  "XOS_File",17,f$ 
  728.  type%;flags%
  729. =(type%=1)
  730. ((flags% 
  731.  1)=0)
  732. seqfname(i%)
  733. =seqdir$+"."+seqfname$(i%)
  734. key(window%,icon%,key%)
  735.  "Wimp_ProcessKey",key%
  736. leafname(f$)
  737.  p%,q%
  738.   p%=q%+1
  739.   q%=
  740. f$,".",p%)
  741.  q%=0
  742. f$,p%)
  743.  --- split name of root directory from pathname ---
  744. striproot(f$)
  745.  p%,q%
  746. f$,"$")
  747.  q%>0
  748.   p%=q%
  749.   q%=
  750. f$,"$",p%+1)
  751. f$,p%)
  752. loadtemplate(name$)
  753.  handle%
  754.  "Wimp_CloseTemplate" : 
  755. error
  756.  "Wimp_LoadTemplate",,blk%+4,indir%,indirend%,-1,name$,0 
  757.  ,,indir%
  758.  "Wimp_CreateWindow",,blk%+4 
  759.  handle%
  760. =handle%
  761. mouseclick(xpos%,ypos%,button%,wndw%,icon%)
  762.  w%,linenr%,field%,data%,a%
  763.  wndw% 
  764.  button% 
  765.       
  766.         
  767.  installed% 
  768. &          
  769. closewindow(winhdl%(0))
  770. &          
  771. closewindow(winhdl%(1))
  772.         
  773.       
  774.         
  775.  installed% 
  776.           
  777. openwindow(0,1)
  778.           
  779. openwindow(1,1)
  780.         
  781.           
  782. dialogue(1)
  783.         
  784.       
  785. +        
  786. showmenu(blk%,mainmenu%,-1,-1)
  787.         
  788.  winhdl%(0),winhdl%(1)
  789.  wndw%=winhdl%(0) 
  790.       w%=0
  791.         
  792.       w%=1
  793.         
  794. (    linenr%=
  795. coordtolinenr(w%,ypos%)
  796. +    
  797.  linenr%>=nrapps%(w%) 
  798.  linenr%=-1
  799. (    field%=
  800. coordtofieldnr(w%,xpos%)
  801. .    
  802.  linenr%>=0 
  803.  data%=appl%(w%,linenr%)
  804.  button% 
  805.       
  806.  2 : 
  807.  menu button
  808. /        
  809. showmenu(blk%,seqmenu%,w%,linenr%)
  810.       
  811. )        
  812.  (linenr%>=0) 
  813.  (field%=1) 
  814. '          
  815.  adjust button on action
  816.           a%=data%!288
  817.           
  818.             
  819.  a%=0 
  820.               a%=nractions%
  821.             
  822.               a%-=1
  823.             
  824. -          
  825. validaction(a%,w%,data%!268)
  826.           
  827.  a%<>data%!288 
  828.             data%!288=a%
  829. '            
  830. redrawline(w%,linenr%)
  831. %            
  832. seq_setchanged(w%,
  833.           
  834.         
  835. )        
  836.  (linenr%>=0) 
  837.  (field%=0) 
  838. *          
  839.  adjust button on item name
  840. %          data%!292=
  841.  (data%!292)
  842. %          
  843. redrawline(w%,linenr%)
  844. #          
  845. seq_setchanged(w%,
  846.         
  847.       
  848. )        
  849.  (linenr%>=0) 
  850.  (field%=0) 
  851. *          
  852.  select button on item name
  853. B          
  854. -prevclicktime%<50) 
  855.  (linenr%=prevclickline%) 
  856. '            
  857. openparent(w%,linenr%)
  858.           
  859.           prevclicktime%=
  860. $          prevclickline%=linenr%
  861.         
  862.     )        
  863.  (linenr%>=0) 
  864.  (field%=1) 
  865. '          
  866.  select button on action
  867.           a%=data%!288
  868.           
  869. !            
  870.  a%=nractions% 
  871.               a%=0
  872.             
  873.               a%+=1
  874.             
  875. -          
  876. validaction(a%,w%,data%!268)
  877.           
  878.  a%<>data%!288 
  879.             data%!288=a%
  880. '            
  881. redrawline(w%,linenr%)
  882. %            
  883. seq_setchanged(w%,
  884.           
  885.         
  886. %      
  887.  4*16 : 
  888.  drag with select
  889. A        
  890.  (linenr%>=0) 
  891.  (linenr%<nrapps%(w%)) 
  892.  (field%=0) 
  893. $          
  894. startdrag(w%,linenr%)
  895.         
  896.         
  897.  dialogwin%
  898.      
  899.  "Wimp_CreateMenu",,-1
  900.  lastdialogue% 
  901.       
  902. "#        
  903.  icon%=1 
  904. install_do
  905.       
  906. $%        
  907.  icon%=1 
  908. install_undo
  909.       
  910.         
  911.  icon%=1 
  912.  quit%=
  913.       
  914.         
  915.  icon%=1 
  916. ))          
  917.  resume shutdown procedure
  918.           shutdown_ok%=
  919. +3          
  920.  "Wimp_GetCaretPosition",,scrapblk%
  921.           scrapblk%!24=&1FC
  922. ->          
  923.  "Wimp_SendMessage",8,scrapblk%,prequitsender%
  924.         
  925. /        
  926. openparent(w%,linenr%)
  927.  "Filer_OpenDir "+
  928. dirname($(appl%(w%,linenr%)))
  929.  --- open a sequence window
  930.      pos%=0 -> at current position
  931.      pos%=1 -> at position as read from choices (unless already open)
  932.      pos%=2 -> at current position, full width
  933.      pos%=3 -> at current position, not on top of stack
  934. openwindow(w%,pos%)
  935. blk%!0=winhdl%(w%)
  936.  "Wimp_GetWindowInfo",,blk%
  937. blk%!28=-1
  938.  pos% 
  939. B#    
  940.  ((blk%!32 
  941.  (1<<16))=0) 
  942.       blk%!4=winxmin%(w%)
  943.       blk%!8=winymin%(w%)
  944.       blk%!12=winxmax%(w%)
  945.       blk%!16=winymax%(w%)
  946. G        
  947. I(    blk%!12=blk%!4+(blk%!52-blk%!44)
  948. K%    
  949.  ((blk%!32 
  950.  (1<<16))=0) 
  951.  "Wimp_OpenWindow",,blk%
  952. closewindow(handle%)
  953. scrapblk%!0=handle%
  954.  "Wimp_CloseWindow",,scrapblk%
  955. readscreenvars
  956.  xeig%,yeig%,xpixels%,ypixels%
  957.  "OS_ReadModeVariable",-1,4 
  958.  ,,xeig%
  959.  "OS_ReadModeVariable",-1,5 
  960.  ,,yeig%
  961.  "OS_ReadModeVariable",-1,11 
  962.  ,,xpixels%
  963.  "OS_ReadModeVariable",-1,12 
  964.  ,,ypixels%
  965. unitsppixel_x%=1<<xeig%
  966. unitsppixel_y%=1<<yeig%
  967. ]Iscreensize_x%=(xpixels%+1)*unitsppixel_x% : 
  968.  screen size in OS units
  969. ^-screensize_y%=(ypixels%+1)*unitsppixel_y%
  970. readvarval(var$)
  971.  len%
  972.  "OS_ReadVarVal",var$,scrapblk2%,256,0 
  973.  ,,len%
  974. scrapblk2%?len%=13
  975. =$(scrapblk2%)
  976. receive(sender%,ref%,code%)
  977.  w%,ack%,file$,type%,hlp$,linenr%,field%,cmd$
  978. ack%=0
  979.  sender% <> thistask% 
  980.  code% 
  981.       quit%=
  982.       file$=
  983. str(blk%+44)
  984.       type%=blk%!40
  985.       
  986.  blk%!20 
  987. r#        
  988.  winhdl%(0),winhdl%(1)
  989. s&          
  990.  (blk%!20=winhdl%(0)) 
  991.             w%=0
  992.           
  993.             w%=1
  994.           
  995. xD          
  996. appl_add(w%,file$,-1,"",0,
  997. coordtolinenr(w%,blk%!32))
  998.           ack%=4
  999.       
  1000.       
  1001.  desktop shutdown
  1002. }<      
  1003.  (changed%(0) 
  1004.  changed%(1)) 
  1005.  shutdown_ok%) 
  1006.         ack%=8
  1007. "        prequitsender%=sender%
  1008.         
  1009. dialogue(4)
  1010.       
  1011.       
  1012.  desktop save
  1013.       file%=blk%!20
  1014. "      cmd$="Run "+ApplDir$+
  1015. +      
  1016.  "OS_GBPB",2,file%,cmd$,
  1017. (cmd$)
  1018.  &502
  1019. *      
  1020.  request from !Help application
  1021.       hlp$=""
  1022.       icon%=blk%!36
  1023.       
  1024.  blk%!32 
  1025.         
  1026.            
  1027.  icon%=baricon% 
  1028. -            hlp$=
  1029. msg_lookup0("HLP_IBAR")
  1030.             
  1031.  installed% 
  1032. 1              hlp$+=
  1033. msg_lookup0("HLP_IBAR1")
  1034.             
  1035. 1              hlp$+=
  1036. msg_lookup0("HLP_IBAR0")
  1037.             
  1038.           
  1039. #        
  1040.  winhdl%(0),winhdl%(1)
  1041. $          
  1042.  blk%!32=winhdl%(0) 
  1043.             w%=0
  1044. -            hlp$=
  1045. msg_lookup0("HLP_SEQ0")
  1046.           
  1047.             w%=1
  1048. -            hlp$=
  1049. msg_lookup0("HLP_SEQ1")
  1050.           
  1051. 0          linenr%=
  1052. coordtolinenr(w%,blk%!24)
  1053. 0          field%=
  1054. coordtofieldnr(w%,blk%!20)
  1055. B          
  1056.  (icon%<0) 
  1057.  (linenr%>=0) 
  1058.  (linenr%<nrapps%(w%)) 
  1059.             
  1060.  field% 
  1061. ;              
  1062.  0 : hlp$+="|M"+
  1063. msg_lookup0("HLP_ITEM")
  1064. ;              
  1065.  1 : hlp$+="|M"+
  1066. msg_lookup0("HLP_ACTN")
  1067. ;              
  1068.  2 : hlp$+="|M"+
  1069. msg_lookup0("HLP_ARGS")
  1070.             
  1071.           
  1072.       
  1073.       
  1074.  hlp$<>"" 
  1075.         $(blk%+20)=hlp$
  1076.         ack%=&503
  1077.       
  1078.  &400C1
  1079.       
  1080. readscreenvars
  1081.  ack%>0 
  1082.     blk%!0=256
  1083.     blk%!12=ref%
  1084.     blk%!16=ack%
  1085. -    
  1086.  "Wimp_SendMessage",17,blk%,sender%
  1087. sprexists(sp$)
  1088.  flags%
  1089.  "XWimp_SpriteOp",&18,,sp$ 
  1090.  ;flags%
  1091. =((flags% 
  1092.  1)=0)
  1093. startdrag(w%,linenr%)
  1094.  b%,spr$,width%
  1095. blk%!0=winhdl%(w%)
  1096.  "Wimp_GetWindowState",,blk%
  1097. dragblk%!4=5
  1098. dragblk%!8=(blk%!4)+4
  1099. Hdragblk%!12=(blk%!16)+icon0ymin%-((linenr%+1)*itemheight%)-(blk%!24)
  1100.  display%(w%)=0 
  1101. %  width%=icon1xmax%-icon0xmin%-16
  1102. %  width%=icon2xmax%-icon0xmin%-16
  1103. #dragblk%!16=(dragblk%!8)+width%
  1104. 8dragblk%!20=(dragblk%!12)+itemheight%-unitsppixel_y%
  1105. dragblk%!24=0
  1106. dragblk%!28=0
  1107. dragblk%!32=xpixels%
  1108. dragblk%!36=ypixels%
  1109.  "OS_Byte",161,&1C 
  1110.  ,,b% : 
  1111.  read "dragasprite" bit in CMOS RAM (RO3)
  1112. dragasprite%=(b% 
  1113.  2)<>0
  1114.  dragasprite% 
  1115.  "Wimp_GetPointerInfo",,ptrinfo%
  1116.   dragblk%!8=ptrinfo%!0-100
  1117.    dragblk%!16=ptrinfo%!0+100
  1118. %  spr$=$(appl%(w%,linenr%)+272+1)
  1119.  "DragASprite_Start",&E5,1,spr$,dragblk%+8,dragblk%+24
  1120.  "Wimp_DragBox",1,dragblk%
  1121. dragfromwin%=w%
  1122. dragfromline%=linenr%
  1123. str(s%)
  1124.  i%,n$
  1125.  s%?i% >= 32 : n$+=
  1126. (s%?i%) : i%+=1 : 
  1127. trimleft(s$)
  1128. s$,p%,1)=" "
  1129.   p%+=1
  1130. s$,p%)
  1131. upcase(s$)
  1132.  i%=1 
  1133.   a%=
  1134. s$,i%,1))
  1135.  (a%>=97)
  1136. (a%<=122) 
  1137. s$,i%,1)=
  1138. (a%-32)
  1139.  returns type of object
  1140.  -2        = not found
  1141.  -1        = untyped file
  1142.  &000-&FFF = typed file
  1143.  &1000     = directory
  1144.  &2000     = application
  1145. objtype(name$)
  1146.  type%,loadaddr%
  1147.  "OS_File",17,name$ 
  1148.  type%,,loadaddr%
  1149.  type% 
  1150.     type%=-2
  1151. (    
  1152.  ((loadaddr%>>20)
  1153.  &FFF)=&FFF 
  1154. %      type%=(loadaddr%>>8) 
  1155.  &FFF
  1156.         
  1157.       type%=-1
  1158.         
  1159. $    
  1160. leafname(file$),1)="!" 
  1161.       type%=&2000
  1162.         
  1163.       type%=&1000
  1164.         
  1165. =type%
  1166. validaction(action%,window%,type%)
  1167.  valid%
  1168.  type% 
  1169.  &FF9
  1170. (    valid%=(action%=5) 
  1171.  (action%=6)
  1172.  &FFA
  1173. (    valid%=(action%=0) 
  1174.  (action%=7)
  1175.  &1000
  1176.     valid%=(action%=4)
  1177.  &2000
  1178.  action% 
  1179.       
  1180.  0,1,8 : valid%=
  1181. &      
  1182.  2,3   : valid%=(window%=1)
  1183.       
  1184.   : valid%=
  1185.         
  1186.     valid%=(action%=0)
  1187. =valid%
  1188. setinstalled(f%)
  1189. installed%=f%
  1190. '"  $(bariconname%)="!rpcbooted"
  1191. )"  $(bariconname%)="frpcbooted"
  1192. seticonstate(-2,baricon%,0,0)
  1193. seticonstate(window%,icon%,eor%,clr%)
  1194. scrapblk%!0=window%
  1195. scrapblk%!4=icon%
  1196. scrapblk%!8=eor%
  1197. scrapblk%!12=clr%
  1198.  "Wimp_SetIconState",,scrapblk%
  1199. selecticon(window%,icon%,f%)
  1200. scrapblk%!0=window%
  1201. scrapblk%!4=icon%
  1202.   scrapblk%!8=1<<21
  1203.   scrapblk%!8=0
  1204. scrapblk%!12=1<<21
  1205.  "Wimp_SetIconState",,scrapblk%
  1206. menuselect(selection%)
  1207.  adjust%,selinfo%,itemnr%,item%,item$,parentitem%,seq%,data%
  1208.  "MenuUtil_Decode",lastmenu%,selection% 
  1209.  ,adjust%,selinfo%
  1210. itemnr%=selinfo%!0
  1211. item%=selinfo%!8
  1212. item$=
  1213. str(selinfo%!12)
  1214. parentitem%=selinfo%!24
  1215. seq%=lastmenu_seq%
  1216.  lastmenu_line%>=0 
  1217.  data%=appl%(seq%,lastmenu_line%)
  1218.  item% 
  1219.  item_install%
  1220.  installed% 
  1221.       
  1222. dialogue(2)
  1223. O        
  1224.       
  1225. dialogue(1)
  1226. Q        
  1227.  item_savechoices%
  1228. choices_save
  1229.  item_quit%
  1230. U%    
  1231.  changed%(0) 
  1232.  changed%(1) 
  1233.       
  1234. dialogue(3)
  1235. W        
  1236.       quit%=
  1237. Y        
  1238.  item_display0%,item_display1%
  1239. [     
  1240.  item%=item_display0% 
  1241.       display%(seq%)=0
  1242. ]        
  1243.       display%(seq%)=1
  1244. _        
  1245. seq_setextent(seq%)
  1246. openwindow(seq%,2)
  1247. redrawfromline(seq%,0)
  1248.  item_openparent%
  1249. d(    
  1250. openparent(seq%,lastmenu_line%)
  1251.  item_off%
  1252.     data%!292=
  1253.  (data%!292)
  1254. g(    
  1255. redrawline(seq%,lastmenu_line%)
  1256. seq_setchanged(seq%,
  1257.  item_delete%
  1258. j&    
  1259. appl_del(seq%,lastmenu_line%)
  1260. openwindow(seq%,3)
  1261.     lastmenu_line%=-1
  1262.  item_args%
  1263.     $(data%+296)=item$
  1264. o(    
  1265. redrawline(seq%,lastmenu_line%)
  1266. seq_setchanged(seq%,
  1267.  item_toroot%
  1268. r%    $(data%)=
  1269. striproot($(data%))
  1270.     $(data%+256)="$"
  1271. t(    
  1272. redrawline(seq%,lastmenu_line%)
  1273.  item_saveseq%
  1274. seq_save(seq%)
  1275.  item_reread%,item_rereadcver%
  1276. seq_clear(seq%)
  1277. y'    
  1278. seq_load(seq%,
  1279. seqfname(seq%))
  1280.  item_rereadpver%
  1281. seq_clear(seq%)
  1282. |6    
  1283. seq_load(seq%,backupdir$+"."+seqfname$(seq%))
  1284. seq_setchanged(seq%,
  1285.  adjust% 
  1286. showmenu(0,lastmenu%,lastmenu_seq%,lastmenu_line%)
  1287.  *** procs for creating menus ***
  1288. showmenu(blkptr%,menu%,seq%,linenr%)
  1289.  item$,b%,dy%
  1290. dy%=22
  1291.  menu% 
  1292.  mainmenu%
  1293.  installed% 
  1294. B      
  1295.  "MenuUtil_Text",item_install%,
  1296. msg_lookup0("IT_DEIN")
  1297.         
  1298. B      
  1299.  "MenuUtil_Text",item_install%,
  1300. msg_lookup0("IT_INST")
  1301.         
  1302. 9    
  1303.  "MenuUtil_Fade",item_savechoices%,
  1304.  installed%
  1305.  seqmenu%
  1306. :    
  1307.  "MenuUtil_TickOnly",displaymenu%,display%(seq%)
  1308. *    item$=
  1309. msg_lookup0("IT_ITEM")+" '"
  1310. -    
  1311.  linenr%>=nrapps%(seq%) 
  1312.  linenr%=-1
  1313.  linenr%<0 
  1314. +      
  1315.  "MenuUtil_Fade",itemsubmenu%,1
  1316. .      
  1317.  "MenuUtil_Colours",item_item%,2,0
  1318.         
  1319. +      
  1320.  "MenuUtil_Fade",itemsubmenu%,0
  1321. .      
  1322.  "MenuUtil_Colours",item_item%,7,0
  1323.        b%=appl%(seq%,linenr%)
  1324.       item$+=$(b%+256)
  1325. 1      
  1326.  "MenuUtil_Text",item_args%,$(b%+296)
  1327. I      
  1328.  "MenuUtil_Fade",item_toroot%,(b%!268<>&1000)
  1329. ($(b%+256)="$")
  1330. :      
  1331.  "MenuUtil_Tick",item_argsmenu%,
  1332. ($(b%+296))>0
  1333. -      
  1334.  "MenuUtil_Tick",item_off%,b%!292
  1335.       dy%+=44
  1336.         
  1337.     item$+="'"
  1338. +    
  1339.  "MenuUtil_Text",item_item%,item$
  1340. A    
  1341.  "MenuUtil_Fade",item_rereadpver%,
  1342.  backupexists%(seq%)
  1343.  blkptr%<>0 
  1344.   blkptr%!4=blkptr%!4+dy%
  1345.   lastmenu%=menu%
  1346.   lastmenu_seq%=seq%
  1347.   lastmenu_line%=linenr%
  1348.  "MenuUtil_Show",lastmenu%,blkptr%
  1349. menu_add(text$,submenu%)
  1350.  handle%
  1351.  "MenuUtil_Add",,text$ 
  1352.  handle%
  1353.  submenu%<>-1 
  1354.  "MenuUtil_SubMenu",handle%,submenu%
  1355. =handle%
  1356. menu_addwritable(maxlen%,validstr%)
  1357.  handle%
  1358.  "MenuUtil_Add",,"" 
  1359.  handle%
  1360.  "MenuUtil_Writable",,1,maxlen%,validstr%
  1361. =handle%
  1362. initmenus
  1363.  "MenuUtil_Initialise",010,0
  1364.  "MenuUtil_New",,appl$ 
  1365.  mainmenu%
  1366. :item_info%=
  1367. menu_add(
  1368. msg_lookup0("IT_INFO"),infowin%)
  1369. "item_install%=
  1370. menu_add("",-1)
  1371. ;item_savechoices%=
  1372. menu_add(
  1373. msg_lookup0("IT_SVCH"),-1)
  1374. 4item_quit%=
  1375. menu_add(
  1376. msg_lookup0("IT_QUIT"),-1)
  1377.  "MenuUtil_New",,
  1378. msg_lookup0("IT_ARGS") 
  1379.  argsmenu%
  1380. &item_args%=
  1381. menu_addwritable(64,0)
  1382.  "MenuUtil_New",,
  1383. msg_lookup0("IT_DISP") 
  1384.  displaymenu%
  1385. 9item_display0%=
  1386. menu_add(
  1387. msg_lookup0("IT_DISP0"),-1)
  1388. 9item_display1%=
  1389. menu_add(
  1390. msg_lookup0("IT_DISP1"),-1)
  1391.  "MenuUtil_New",,
  1392. msg_lookup0("IT_ITEM") 
  1393.  itemsubmenu%
  1394. 2item_off%=
  1395. menu_add(
  1396. msg_lookup0("IT_OFF"),-1)
  1397. ?item_argsmenu%=
  1398. menu_add(
  1399. msg_lookup0("IT_ARGS"),argsmenu%)
  1400.  "MenuUtil_Dots",0,1
  1401. :item_openparent%=
  1402. menu_add(
  1403. msg_lookup0("IT_OPAR"),-1)
  1404. 6item_toroot%=
  1405. menu_add(
  1406. msg_lookup0("IT_ROOT"),-1)
  1407. 5item_delete%=
  1408. menu_add(
  1409. msg_lookup0("IT_DEL"),-1)
  1410.  "MenuUtil_New",,
  1411. msg_lookup0("IT_RERD") 
  1412.  rereadmenu%
  1413. :item_rereadcver%=
  1414. menu_add(
  1415. msg_lookup0("IT_CVER"),-1)
  1416. :item_rereadpver%=
  1417. menu_add(
  1418. msg_lookup0("IT_PVER"),-1)
  1419.  "MenuUtil_New",,
  1420. msg_lookup0("IT_SEQ") 
  1421.  seqmenu%
  1422. Aitem_display%=
  1423. menu_add(
  1424. msg_lookup0("IT_DISP"),displaymenu%)
  1425. )item_item%=
  1426. menu_add("",itemsubmenu%)
  1427. 7item_saveseq%=
  1428. menu_add(
  1429. msg_lookup0("IT_SVSQ"),-1)
  1430. ?item_reread%=
  1431. menu_add(
  1432. msg_lookup0("IT_RERD"),rereadmenu%)
  1433. lastmenu%=0
  1434.  *** procs for handling messages in the Messages file ***
  1435. msg_init
  1436.  fname$,flags%,size%,buf%
  1437. fname$=ApplPath$+"Messages"
  1438.  "MessageTrans_FileInfo",,fname$ 
  1439.  flags%,,size%
  1440.  flags% 
  1441.   buf%=0
  1442.  buf% size%
  1443.  MsgDesc% 17+
  1444. (fname$)
  1445. $(MsgDesc%+16)=fname$
  1446.  "MessageTrans_OpenFile",MsgDesc%,MsgDesc%+16,buf%
  1447. msg_exit
  1448.  "MessageTrans_CloseFile",MsgDesc%
  1449. MsgDesc%=0
  1450. msg_lookup0(token$)
  1451.  result%
  1452.  "MessageTrans_Lookup",MsgDesc%,token$,0 
  1453.  ,,result%
  1454. str(result%)
  1455. msg_lookup1(token$,param$)
  1456.  result%
  1457.  "MessageTrans_Lookup",MsgDesc%,token$,scrapblk%,&100,param$ 
  1458.  ,,result%
  1459. str(result%)
  1460. dialogue(no%)
  1461.  cancelbutton%,text1$,text2$,text3$,beep%
  1462. beep%=
  1463.  no% 
  1464. '    $dial_msg%=
  1465. msg_lookup0("NRMI")
  1466. !    text2$=
  1467. msg_lookup0("OK")
  1468.     beep%=
  1469. 0    $dial_msg%=
  1470. msg_lookup1("INSTALL",appl$)
  1471. #    text1$=
  1472. msg_lookup0("INST")
  1473. #    text3$=
  1474. msg_lookup0("CANC")
  1475. 2    $dial_msg%=
  1476. msg_lookup1("DEINSTALL",appl$)
  1477. %    text1$=
  1478. msg_lookup0("DEINST")
  1479. #    text3$=
  1480. msg_lookup0("CANC")
  1481. '    $dial_msg%=
  1482. msg_lookup0("QNYW")
  1483. #    text1$=
  1484. msg_lookup0("QUIT")
  1485. #    text3$=
  1486. msg_lookup0("CANC")
  1487. dialogue_setbutton(1,text1$)
  1488. dialogue_setbutton(2,text2$)
  1489. dialogue_setbutton(3,text3$)
  1490.  beep% 
  1491. scrapblk%!0=dialogwin%
  1492.  "Wimp_GetWindowState",,scrapblk%
  1493. 8xpos%=(screensize_x%-(scrapblk%!12-scrapblk%!4)) 
  1494. 8ypos%=(screensize_y%+(scrapblk%!16-scrapblk%!8)) 
  1495.  "Wimp_CreateMenu",,dialogwin%,xpos%,ypos%
  1496. lastdialogue%=no%
  1497. dialogue_setbutton(no%,text$)
  1498.  mask%
  1499. mask%=(1<<2)+(&FF<<24)
  1500.  text$="" 
  1501.  make button invisible
  1502. seticonstate(dialogwin%,no%,&11<<24,mask%) 
  1503.   $(dial_text%(no%))=text$
  1504. seticonstate(dialogwin%,no%,dial_buttoncol%,mask%)
  1505. heap_init
  1506. '>Heap%=
  1507.  heap starts just after end of allocated memory
  1508.  "OS_ReadMemMapInfo" 
  1509.  PageSize%
  1510.  enlarge wimpslot (1 page) and create private heap in new memory
  1511. SlotSize%=Heap%-&8000
  1512.  "Wimp_SlotSize",SlotSize%+PageSize%,-1 
  1513.  SlotSize%
  1514. HeapEnd%=SlotSize%+&8000
  1515.  HeapEnd%<=Heap% 
  1516.  0,"Can't claim space for heap"
  1517.  "OS_Heap",0,Heap%,,HeapEnd%-Heap%
  1518. heap_get(size%)
  1519.  maxfree%,nrpages%,oldheapend%,ptr%
  1520.  "OS_Heap",1,Heap% 
  1521.  ,,maxfree%
  1522.  size%>maxfree% 
  1523.  largest free block is too small - try to enlarge wimpslot and heap
  1524. 6C  nrpages%=1+(size% 
  1525.  PageSize%) : 
  1526.  required # pages of memory
  1527.  "Wimp_SlotSize",SlotSize%+nrpages%*PageSize%,-1 
  1528.  SlotSize%
  1529.   oldheapend%=HeapEnd%
  1530.   HeapEnd%=SlotSize%+&8000
  1531.  "OS_Heap",5,Heap%,,HeapEnd%-oldheapend%
  1532.  "OS_Heap",1,Heap% 
  1533.  ,,maxfree% : 
  1534.  do we have enough now?
  1535.  size%>maxfree% 
  1536. complain(
  1537. msg_lookup0("NOHP"))
  1538.   ptr%=-1
  1539.  "OS_Heap",2,Heap%,,size% 
  1540.  ,,ptr%
  1541. C    =ptr%
  1542. heap_release(ptr%)
  1543.  maxfree%,nrpages%,flg%
  1544.  "OS_Heap",3,Heap%,ptr%
  1545.  "OS_Heap",1,Heap% 
  1546.  ,,maxfree%
  1547.  maxfree%>PageSize% 
  1548.  more than 1 page free - try to shrink heap (page by page)
  1549. K,  nrpages%=0 : 
  1550.  # pages of memory freed
  1551. M1    
  1552.  "XOS_Heap",5,Heap%,,-PageSize% 
  1553.  ;flg%
  1554.  (flg% 
  1555.  1)=0 
  1556.       nrpages%+=1
  1557. P        
  1558.  (flg% 
  1559.  1)<>0
  1560.  nrpages%>0 
  1561. S4    
  1562.  successfully shrunk heap - shrink WimpSlot
  1563. TF    
  1564.  "Wimp_SlotSize",SlotSize%-nrpages%*PageSize%,-1 
  1565.  SlotSize%
  1566. U     HeapEnd%=SlotSize%+&8000
  1567.  "OS_Heap",5,Heap%,,(HeapEnd%-Heap%)-Heap%!12
  1568. choices_load
  1569.  (ApplDir$+".Choices")
  1570.  F%=0 
  1571. choices_default
  1572. #F%,display%(0),display%(1)
  1573. #F%,winxmin%(0),winymin%(0),winxmax%(0),winymax%(0)
  1574. #F%,winxmin%(1),winymin%(1),winxmax%(1),winymax%(1)
  1575. choices_save
  1576.  (ApplDir$+".Choices")
  1577.  F%<>0 
  1578. #F%,display%(0),display%(1)
  1579.   scrapblk%!0=winhdl%(0)
  1580.  "Wimp_GetWindowState",,scrapblk%
  1581.   winxmin%(0)=scrapblk%!4
  1582.   winymin%(0)=scrapblk%!8
  1583.   winxmax%(0)=scrapblk%!12
  1584.   winymax%(0)=scrapblk%!16
  1585. #F%,winxmin%(0),winymin%(0),winxmax%(0),winymax%(0)
  1586.   scrapblk%!0=winhdl%(1)
  1587.  "Wimp_GetWindowState",,scrapblk%
  1588.   winxmin%(1)=scrapblk%!4
  1589.   winymin%(1)=scrapblk%!8
  1590.   winxmax%(1)=scrapblk%!12
  1591.   winymax%(1)=scrapblk%!16
  1592. #F%,winxmin%(1),winymin%(1),winxmax%(1),winymax%(1)
  1593. choices_default
  1594. display%(0)=0      
  1595. display%(1)=0
  1596. winxmin%(0)=2
  1597. winymin%(0)=824
  1598. winxmax%(0)=580
  1599. winymax%(0)=980
  1600. winxmin%(1)=660
  1601. winymin%(1)=824
  1602. winxmax%(1)=1238
  1603. winymax%(1)=980
  1604.